// 实现二维数组 3 4
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char **argv)
{
    int i = 0;
    int j = 0;
    int **arr = NULL;

    // 设置随机数种子
    srand(time(NULL));

    // 申请
    arr = calloc(3, sizeof(int *));
    if (NULL == arr)
    {
        perror("calloc fail");
        goto error0;
    }

    for (i = 0; i < 3; i++)
    {
        arr[i] = calloc(4, sizeof(int));
        if (NULL == arr[i])
        {
            perror("calloc fail");
            goto error1;
        }
    }

    // 输出
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            arr[i][j] = rand() % 100 + 1;
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    
    // 释放空间
    for (i = 0; i < 3; i++)
    {
        free(arr[i]);
        arr[i] = NULL;
    }
    free(arr);
    arr = NULL;


    return 0;

error1:
    for (i; i > 0; i--)
    {
        free(arr[i]);
        arr[i] = NULL;
    }
    free(arr);
    arr = NULL;

error0:
    return 1;
}